// 导入需要存储在本地的所有键名
import LocalStorageKey from '../localStorageKey/localStorageKey.js'

export default {
    // 为当前模块开启命名空间 
    namespaced: true,
    // 模块state数据
    state: () => ({
      // 购物车数组，存储购物车中每个商品信息对象
      // 每个信息对象都包含这6个属性
      // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
      cart: JSON.parse(uni.getStorageSync(LocalStorageKey.SHOP_CART_NAME) || '[]'),
    }),
    // mutations方法---定义函数用来修改state中的数据
    mutations: {
      // 添加购物车商品的方法更新State中购物车数组数据 
      addToCart(state, cartGood) {
        // findIndex方法根据数组元素的某属性找数组索引，如果有则为找到的对象元素索引，如果没有-1
        const isHave = state.cart.findIndex(x => x.goods_id == cartGood.goods_id)
        // 判断State中Cart数组中是否有要添加的购物车对象
        // 如果有只改变对象中goods_count数量即可
        if (isHave !== -1) {
          state.cart[isHave].goods_count += 1
          // 购物车数据发生变化，调用mapMutations中方法将购物车数据存储在本地
          this.commit('m_cart/setSaveLocalCartArr') 
          return
        }
        // 如果没有直接添加到数组中
        state.cart.push(cartGood)
        // 购物车数据发生变化，调用mapMutations中方法将购物车数据存储在本地
        this.commit('m_cart/setSaveLocalCartArr') 
      },
      // 【数据持久化】将State中Cart数组保存在本地存储中
      setSaveLocalCartArr(state) {
        uni.setStorageSync(LocalStorageKey.SHOP_CART_NAME, JSON.stringify(state.cart))
      }
    },
    // getters方法---状态管理计算属性
    getters: {
      total(state) {
        return state.cart.reduce((total,item) => total += item.goods_count, 0)
      }
    },
}